/**
 * Copyright (c) 2014-2017, huli.com
 * All rights reserved.
 */
package com.xiaohujr.xuexue.vm.exceptions;

import java.util.ArrayList;
import java.util.List;

/**
 * Java堆溢出测试OutOfMemoryException.
 * <p>
 * 堆内存溢出
 * <p>
 * java堆用于存放对象的实例，当需要为对象的实例分配内存时，
 * 而堆的占用已经达到了设置的最大值(通过-Xmx)设置最大值，则抛出OutOfMemoryError异常。
 *
 * @author Xue Xue (xuexue1@huli.com)
 * @version $Id$
 * @since 2018/5/2
 */
public class HeapOOMTest {

    static class OOMObject {
    }

    /**
     * VM args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError. 堆最小尺寸,堆最大尺寸,生成hprof文件.
     * 事后会生成hprof文件可供分析使用,
     * 使用HProf非常消耗资源,切记不要在生产系统使用,
     * -Xrunhprof:heap=sites,jdk自带分析hprof工具,切记不要在生产系统使用.
     *
     * @param args 虚拟机参数.
     */
    public static void main(String[] args) {
        List<OOMObject> list = new ArrayList<>();
        while (true) {
            list.add(new OOMObject());
        }
    }
}
